文章目录
  1. 1. 整理 Gradle 工程模板的目的
  2. 2. 本地 PC 环境搭建
    1. 2.1. 安装 jdk
    2. 2.2. 安装 Android Studio
    3. 2.3. 安装 Gradle
    4. 2.4. Gradle 工程模板
    5. 2.5. 本地编译 App 工程
    6. 2.6. 本地 App 开发工具版本信息
  3. 3. 编译服务器集成环境配置
    1. 3.1. App 工程 make 脚本
  4. 4. 待改进

整理 Gradle 工程模板的目的

我之前公司是一家 soc 公司,有下面几个特点:

  1. 本地电脑不能上外网,只能上内网
  2. 有 app 开发,但是不是移动互联网公司那种大型的,基本是就是系统自带的一些基础应用
  3. 系统编译、打包在内网编译服务器

我想达到下面几个目的,提升开发效率:

  1. 方便新的同事(或是不熟悉 app 开发的同事)无门槛快速搭建 app 开发环境
  2. 能在本地 PC 使用 Android Studio 开发调试 app
  3. app 工程可以不用修改直接在编译服务器编译集成
  4. app 工程可以不用修改直接在本地 PC 编译、调试

因此我需要做到:

  1. 搭建一个内网离线 maven 仓库,定时维护更新大家需要的 libs。
  2. 搭建统一版本工具链的本地 PC Android Studio 开发环境
  3. 搭建统一的 gradle 工程模块,能在本地 PC 导入 Android Studio 开发调试;也能在服务器上使用 mk 编译、集成。

本地 PC 环境搭建

这里本地的 PC 是 window 的环境,所有的工具都在官网有下载:

安装 jdk

  1. 安装 jdk-8u112-windows-x64.exe

  2. 在 系统变量 Path 中添加 jdk 的安装路径,如果默认安装c盘就是:C:\Program Files\Java\jdk1.8.0_112\bin。在 cmd 中输入 java -version 能正确显示 jdk 版本号就表示配置好了。

安装 Android Studio

  1. 安装 android-studio-ide-193.6626763-windows.exe

  2. 打开 Android Sutido: File->Settings->Appearance & Behavior -> System Settings -> Android SDK:编辑 Android SDK Location: 将 2.2 中 sdk 解压的路径填上。

安装 Gradle

  1. 在本地的用户目录(一般在C盘,例如:C:\Users\zhouyuchen\)找到文件夹 .gradle(安装 Android Studio 会自动创建,如果没有可以手动创建,注意如果要手动创建 . 开头的文件夹,需要后结尾加 “.”,例如创建 .gardle,需要输入 “.gradle.”)。

  2. copy gradle\wrapper\dists\ 下面的 zip 包到本地 .gradle\ 的相同路径,例如服务器上的是 gradle\wrapper\dist\gradle-5.1.1-all.zip 就 copy 到本地 .gradle\wrapper\dist\gradle-5.1.1-all.zip。然后再本地再 dist 目录下解压 zip 包。注意解压后的路径为:.gradle\wrapper\dist\gradle-5.1.1-all\

Gradle 工程模板

(1). 模板工程结构介绍(一般没在下面结构的都是编译生成的中间文件,不要编译中间文件上传到代码仓库中):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
app_template:
|
|----- Android.mk: android 系统环境make脚本
|----- settings.gradle: gradle 配置项,可以配置编译的模块(module)
|----- build.gradle: 工程顶级 gradle 脚本
|----- gradlew: linux gradle 编译bin命令
|----- gradlew.bat: window gradle 编译bin命令
|----- gradle/
| |---- wrapper/
| |---- gradle-wrapper.jar
| |---- gradle-wrapper.properties gradle 属性配置,一般配置 gradle 的版本
|
| app/: apk主工程(本质上主工程属于一个 module)
| |----- build.gradle
| |----- src/
| |---- main/
| |---- Android.mk: android 系统环境make脚本
| |---- AndroidManifest.xml
| |---- java: java 代码
| |---- res: 资源文件
| |---- libs: 引用的第三方 jar 库
| |---- jniLibs: jni 编译后打包的 so 路径
| |---- proguard-project.txt: proguard 混淆配置文件
| |---- jni: jni 代码
| |---- Application.mk: jni 编译配置文件
| |---- Android.mk: jni make脚本
|
| module1/
| |---- build.gradle
|
| module2/
| |---- build.gradle
|

(2). 配置 sdk 路径:copy local.properties 到顶级 build.gradle 同级,配置:

1
2
3
# 这里配置的是 sdk 的解压路径
sdk.dir=D:\\android\\android-sdk-windows
ndk.dir=D:\\android\\android-sdk-windows\\ndk-bundle

(3). 配置 gradle 版本:gradle-wrapper.properties 配置:

1
2
# 这里配置的是 5.1.1 版本
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

(4). 配置 sdk、依赖库的版本:顶层build.gradle 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
ext {
// 编译 sdk 版本,build tools 和要编译 sdk 版本对应
buildToolsVersion = '28.0.3'
compileSdkVersion = 28
minSdkVersion = 19
targetSdkVersion = 28
versionCode = 1
versionName = '1.0.0'
// 第三方依赖库版本定义
libs = [
appcompat: 'com.android.support:appcompat-v7:25.0.0',
recyclerview: 'com.android.support:recyclerview-v7:25.0.0',
]
}
buildscript {
repositories {
// 配置maven仓库路径优先查找内部服务器的路径
maven() {url 'file://\\192.168.200.10\\swc_apd\\offline_maven_repo\\repository'}
mavenLocal()
}
dependencies {
// 配置gradle build tools 的版本
classpath 'com.android.tools.build:gradle:3.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven() {url 'file://\\192.168.200.10\\swc_apd\\offline_maven_repo\\repository'}
mavenLocal()
}
}

(5). jni 配置(如果有的话):按照工程实际的情况,配置 Application.mk 和 Android.mk

本地编译 App 工程

  1. 如果有 jni 的话,先编译 jni:cmd 进入 jni 目录,输入 ndk-build.cmd 编译通过后,会在 jni 同级目录 libs 目录下生成编译的 so。

  2. 将编译生成的 so copy 到 jniLibs 下,好打包到 apk 中。采用手动编译 jni 的方式,可以避免每次 build apk 都会改变生成的 so。

  3. cmd 进入工程顶级目录,执行 gradlew.bat build 编译 App 工程。

  4. 如果 cmd 编译没有错误,就可以使用 Android Studio 的 Import Gradle 工程的功能导入到 Android Studio IDE 中,使用 IDE 进行调试、开发。

本地 App 开发工具版本信息

  1. Jdk: 1.8.0

  2. Android Studio: 4.0.1

  3. Android Sdk: 19, 24, 27, 28, 29

  4. Android Ndk: 19.2.5345600

  5. Android build tools: 28.0.3

  6. Gradle: 5.1.1-all

  7. Gradle build tools: 3.4.0

  8. Android Support: 自行去服务器maven仓库路径 offline_maven_repo\repository\com\android\support 下查看包含的版本

编译服务器集成环境配置

App 工程 make 脚本

(1). 顶级 Android.mk 包含 app 主工程模块和 jni 模块(如果有的话):

1
2
3
4
5
6
7
8
9
10
# 如果使用 LOCAL_PATH 会被 include 的 jni 编译脚本覆盖掉
LOCAL_PATH_PRIVATE := $(call my-dir)
# 编译 jni
$(info building jni ... )
include $(LOCAL_PATH_PRIVATE)/app/src/main/jni/Android.mk
# 编译 apk
$(info building apk ... )
include $(LOCAL_PATH_PRIVATE)/app/src/main/Android.mk

(2). jni Android.mk(如果有的话):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libjni
LOCAL_SRC_FILES := \
JavaApi.cpp \
JniApi.cpp
LOCAL_LDLIBS := -lm -llog
LOCAL_PRODUCT_MODULE := true
include $(BUILD_SHARED_LIBRARY)

(3). app(main) Android.mk:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
$(info local_path $(LOCAL_PATH))
# 如果引用了 android support 库要在这里添加
LOCAL_STATIC_ANDROID_LIBRARIES := \
android-support-v7-recyclerview \
android-support-v7-appcompat
LOCAL_SRC_FILES := $(call all-java-files-under, java)
# 添加 res 资源文件
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SDK_VERSION := current
LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_JNI_SHARED_LIBRARIES := libjni
LOCAL_PACKAGE_NAME := AppTemplate
LOCAL_MODULE_TAGS := optional
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_CERTIFICATE := platform
LOCAL_PRODUCT_MODULE := true
include $(BUILD_PACKAGE)

(4). 把 App 工程放到 android/vendor/xx/public/package/apk 目录下,在完整编译了一次 android 之后,就可以进入 App 工程目录 mm 编译 apk 了。

待改进

  1. maven仓库可以在内网架设本地镜像仓库。

  2. 本地 jni 编译可以采用更先进的 CMake 编译。

  3. 编译服务器的编译可以采用更先进的 Android.bp 编译。

  4. 后续根据需求持续更新 sdk 版本。

文章目录
  1. 1. 整理 Gradle 工程模板的目的
  2. 2. 本地 PC 环境搭建
    1. 2.1. 安装 jdk
    2. 2.2. 安装 Android Studio
    3. 2.3. 安装 Gradle
    4. 2.4. Gradle 工程模板
    5. 2.5. 本地编译 App 工程
    6. 2.6. 本地 App 开发工具版本信息
  3. 3. 编译服务器集成环境配置
    1. 3.1. App 工程 make 脚本
  4. 4. 待改进